/**
 * 
 */
package net.sf.cldsql.dj.container.base;

import java.lang.reflect.Constructor;
import java.lang.reflect.Method;

import net.sf.cldsql.dj.container.DiContainer;

/**
 * DiAop
 */
public interface DiAop<T> {
    void setContainer (DiContainer container);
    T beforeCreate (T delegate, Constructor constructor, Object[] args);
    T afterCreate (T delegate, Constructor constructor, Object[] args, T proxy);
    void before (T delegate, Method method, Object[] args);
    Object after (T delegate, Method method, Object[] args, Object result);
    void error (T delegate, Method method, Object[] args, Exception e);
    void finalli (T delegate, Method method, Object[] args);
}

